﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DataAccessLayer;
using DTO;
using System.Configuration;

namespace DAL
{
    public class TheTinDungDAL
    {
        private DBManager _dbmanager;

        #region Phương thức khởi tạo mặc định
        /// <summary>
        /// Phương thức khởi tạo mặc định
        /// </summary>
        public TheTinDungDAL()
        {
            string _connectionInfo = ConfigurationManager.AppSettings["ConnectionInfo"];
            _dbmanager = new DBManager(DataProvider.SqlServer, _connectionInfo);
        }
        #endregion

        #region Phương thức tạo Object từ Data Reader
        /// <summary>
        /// Phương thức tạo Object từ Data Reader
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        private TheTinDungDTO CreateTheTinDungFromReader(IDataReader reader)
        {
            TheTinDungDTO _ttdDTO = new TheTinDungDTO();
            _ttdDTO.MaTheTinDung = Convert.ToInt32(reader["MaTheTinDung"]);
            _ttdDTO.MaKhachHang = Convert.ToString(reader["MaKhachHang"]);
            _ttdDTO.SoThe = Convert.ToString(reader["SoThe"]);
            _ttdDTO.MoTa = Convert.ToString(reader["MoTa"]);
            return _ttdDTO;
        }
        #endregion

        #region Phương thức lấy toàn bộ thông tin thẻ tín dụng
        /// <summary>
        /// Phương thức lấy toàn bộ thông tin thẻ tín dụng
        /// </summary>
        /// <returns></returns>
        public List<TheTinDungDTO> GetListTheTinDung()
        {

            List<TheTinDungDTO> _lst = new List<TheTinDungDTO>();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListTheTinDung");
                while (_reader.Read())
                    _lst.Add(this.CreateTheTinDungFromReader(_reader));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _lst;
            
        }
        #endregion

        #region Phương thức lấy thông tin 1 thẻ tín dụng dựa vào mã thẻ tín dụng
        /// <summary>
        /// Phương thức lấy thông tin 1 thẻ tín dụng dựa vào mã thẻ tín dụng
        /// </summary>
        /// <param name="mattd"></param>
        /// <returns></returns>
        public TheTinDungDTO GetTheTinDung(int mattd)
        {
            
            TheTinDungDTO _ttdDTO = new TheTinDungDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_ttd", mattd);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getTheTinDung");
                while (_reader.Read())
                    _ttdDTO = this.CreateTheTinDungFromReader(_reader);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _ttdDTO;
        }
        #endregion

        #region Phương thức lấy thông tin 1 thẻ tín dụng dựa vào mã thẻ tín dụng
        /// <summary>
        /// Phương thức lấy thông tin 1 thẻ tín dụng dựa vào mã khách hàng
        /// </summary>
        /// <param name="makh"></param>
        /// <returns></returns>
        public TheTinDungDTO GetListTheTinDungTheoMaKhachHang(string makh)
        {

            TheTinDungDTO _ttdDTO = new TheTinDungDTO();
            IDataReader _reader = null;
            try
            {
                _dbmanager.Open();
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_kh", makh);
                _reader = _dbmanager.ExecuteReader(CommandType.StoredProcedure, "usp_getListTheTinDungTheoMaKhachHang");
                while (_reader.Read())
                    _ttdDTO = this.CreateTheTinDungFromReader(_reader);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_reader != null)
                    _reader.Close();
            }
            return _ttdDTO;
        }
        #endregion

        #region Phương thức thêm 1 thẻ tín dụng
        /// <summary>
        /// Phương thức thêm 1 thẻ tín dụng
        /// </summary>
        /// <param name="ttdDTO"></param>
        /// <returns></returns>
        public int Them(TheTinDungDTO ttdDTO)
        {
            
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(3);
                //_dbmanager.AddParameters(0, "@ma_lbv", lbv.MaTheTinDung); -- Generation
                _dbmanager.AddParameters(0, "@ma_kh", ttdDTO.MaKhachHang);
                _dbmanager.AddParameters(1, "@sothe", ttdDTO.SoThe);
                _dbmanager.AddParameters(2, "@mota", ttdDTO.MoTa);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_ThemTheTinDung");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
            
        }
        #endregion

        #region Phương thức sửa thông tin 1 thẻ tín dụng
        /// <summary>
        /// Phương thức sửa thông tin 1 thẻ tín dụng
        /// </summary>
        /// <param name="ttdDTO"></param>
        /// <returns></returns>
        public int Sua(TheTinDungDTO ttdDTO)
        {
            
            int _index = -1;
            try
            {
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn                
                _dbmanager.CreateParameters(3);
                //_dbmanager.AddParameters(0, "@ma_lbv", lbv.MaTheTinDung); -- Generation
                _dbmanager.AddParameters(0, "@ma_kh", ttdDTO.MaKhachHang);
                _dbmanager.AddParameters(1, "@sothe", ttdDTO.SoThe);
                _dbmanager.AddParameters(2, "@mota", ttdDTO.MoTa);

                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_CapNhatTheTinDung");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;
            
        }
        #endregion

        #region Phương thức xóa 1 thẻ tín dụng
        /// <summary>
        /// Phương thức xóa 1 thẻ tín dụng
        /// </summary>
        /// <param name="lbv"></param>
        /// <returns></returns>
        public int Xoa(TheTinDungDTO ttdDTO)
        {            
            int _index = -1;
            try
            { 
                // Mở kết nối
                _dbmanager.Open();

                // Thực thi câu truy vấn
                _dbmanager.CreateParameters(1);
                _dbmanager.AddParameters(0, "@ma_ttd", ttdDTO.MaTheTinDung);
                _index = _dbmanager.ExecuteNonQuery(CommandType.StoredProcedure, "usp_XoaTheTinDung");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                if (_dbmanager.Connection.State == ConnectionState.Open)
                    _dbmanager.Close();
            }

            return _index;

        }
        #endregion
    }
}
